/**
 * @fileoverview Giant Interective Group, Inc. Javascript Library v2.0.0.
 * 该Javascript UI库是基于jQuery的扩展。
 * <pre>
 * Copyright (C) 2004-2009 Giant Interective Group, Inc. All rights reserved.
 * 版权所有 2004-2009 上海巨人网络科技有限公司
 * </pre>
 * @version 2.0.0, 2009-05-14 11:29:45
 * @author  Zhangkai
 * Depend on jQuery 1.3.x
 */
 if(typeof giant === 'undefined')
    var giant = window.giant = {};
if(typeof giant.ui === 'undefined')
    giant.ui = {};
 (function($) {
 	 /** @namespace Giant UI 库核心名称空间。*/
    if (giant.ui == null || giant.ui == 'undefined') {
        giant.ui = {};
    }
    var isShow = false;
    /**
     * 创建个新的giant.ui.tab。
     * @giant.ui.tab tab标签组件。
     * @constructor
     * @returns {giant.ui.tab} 
     * @example
     * <pre>
     * //放入body中间
     *   &lt;div id=&quot;demo4&quot;&gt;
     *   &lt;p&gt;回调函数&lt;/p&gt;
     *    &lt;div class=&quot;ui-tab-container&quot;&gt;
     *       &lt;ul class=&quot;clearfix ui-tab-list&quot;&gt;
     *           &lt;li class=&quot;ui-tab-active&quot;&gt;tab1&lt;/li&gt;
     *           &lt;li&gt;tab2&lt;/li&gt;
     *           &lt;li&gt;tab3&lt;/li&gt;
     *       &lt;/ul&gt;
     *       &lt;div class=&quot;ui-tab-bd&quot;&gt;
     *           &lt;div class=&quot;ui-tab-content&quot;&gt;content1&lt;p&gt;content1&lt;/p&gt;&lt;p&gt;content1&lt;/p&gt;&lt;/div&gt;
     *           &lt;div class=&quot;ui-tab-content&quot; style=&quot;display:none&quot;&gt;content2&lt;p&gt;content2&lt;/p&gt;&lt;p&gt;content2&lt;/p&gt;&lt;/div&gt;
     *           &lt;div class=&quot;ui-tab-content&quot; style=&quot;display:none&quot;&gt;&lt;p&gt;content3&lt;/p&gt;&lt;p&gt;content3&lt;/p&gt;&lt;p&gt;content3&lt;/p&gt;&lt;/div&gt;
     *       &lt;/div&gt;
     *   &lt;/div&gt;
     *   &lt;/div&gt;
     * //以下代码放入body的onload函数中
     *   var tab4 = new giant.ui.tab({
     *   tabList:"#demo4 .ui-tab-container .ui-tab-list li",
     *   contentList:"#demo4 .ui-tab-container .ui-tab-content",
     *   showType:"slide",
     *   callBackStartEvent:function(index){
     *       alert(index);
     *   },
     *   callBackHideEvent:function(index){
     *       alert("hideEvent"+index);
     *   },
     *   callBackShowEvent:function(index){
     *       alert("showEvent"+index);
     *   }
     *   });
     * </pre>
     */
    giant.ui.tab = function(options) {
        this.opts = $.extend({},giant.ui.tab.defaults, options);
        this._init();
        this.disableArr=[];
    }   
    giant.ui.tab.prototype={
        _init:function(){
            var _this = this;
            if($(_this.opts.tabList).length>0){
                $(_this.opts.tabList).each(function(index){
                        $(this).bind(_this.opts.eventType,function(){
                            //判断是否禁用，是否效果还在执行中，是否在当前选中的按钮上
                            if($.inArray(index,_this.disableArr)==-1&&(!isShow)&&$(this).attr("class").indexOf(_this.opts.tabActiveClass)==-1){
                                //callback
                                if(_this.opts.callBackStartEvent){
                                    _this.opts.callBackStartEvent(index);
                                }
                                $(_this.opts.tabList).removeClass(_this.opts.tabActiveClass);
                                $(this).addClass(_this.opts.tabActiveClass);
                                _this._showContent(index);
                            }
                        });
                    });
            }
        },
        _showContent:function(index){
            isShow = true;
            var _this = this;
            switch(_this.opts.showType){
                case "show":
                    $(_this.opts.contentList+":visible").hide();
                    //callback
                    if($.isFunction(_this.opts.callBackHideEvent)){
                        _this.opts.callBackHideEvent(index);
                    }
                    $(_this.opts.contentList).eq(index).show();
                    if($.isFunction(_this.opts.callBackShowEvent)){
                        _this.opts.callBackShowEvent(index);
                    }
                    isShow =false;
                    break;
                case "fade":
                    $(_this.opts.contentList+":visible").fadeOut(_this.opts.showSpeed,function(){
                        //callback
                        if($.isFunction(_this.opts.callBackHideEvent)){
                            _this.opts.callBackHideEvent(index);
                        }
                        $(_this.opts.contentList).eq(index).fadeIn(function(){
                            //callback
                            if($.isFunction(_this.opts.callBackShowEvent)){
                                _this.opts.callBackShowEvent(index);
                            }
                            isShow =false;
                        });
                    });
                    break;
                case "slide":
                    $(_this.opts.contentList+":visible").slideUp(_this.opts.showSpeed,function(){
                        //callback
                        if($.isFunction(_this.opts.callBackHideEvent)){
                            _this.opts.callBackHideEvent(index);
                        }
                        $(_this.opts.contentList).eq(index).slideDown(function(){
                            //callback
                            if($.isFunction(_this.opts.callBackShowEvent)){
                                _this.opts.callBackShowEvent(index);
                            }
                            isShow =false;
                        });
                    });
                    break;
            }
        },
        /**
         *禁用一个tab
         *@param {Number}  要禁用的tab的索引.从0开始 
         */
        setDisable:function(index){
            //如果不存在
            var _this = this;
            if($.inArray(index,this.disableArr)==-1){
                this.disableArr.push(index);
                $(_this.opts.tabList).eq(index).addClass(_this.opts.tabDisableClass);
            }
        },
         /**
         *启用一个已禁用tab
         *@param {Number}  要启用的tab的索引.从0开始 
         */
        setEnable:function(index){
            //如果不存在
            var _this = this;
            var i =$.inArray(index,this.disableArr);
            if(i>-1){
                this.disableArr.splice(i,1);
                $(_this.opts.tabList).eq(index).removeClass(_this.opts.tabDisableClass);
            }
        },
        triggleTab:function(index){
            $(this.opts.tabList).eq(index).trigger(this.opts.eventType);
        }
    }
    /**
     * @default
     * <pre>
     * tabList tab标签
     * contentList ==> tab对应的内容容器
     * tabActiveClass==> 处于选中tab的样式
     * tabDisableClass ==>处于禁用中的tab的样式
     * eventType==> 触发tab切换的事件，有click和mouseover两种类型,默认为click
     * showType==> tab的显示方式,有三种,show 直接显示，fade渐变，slide滑动,默认为show
     * showSpeed==> 显示时间,单位为毫秒,当showType设置为fade 和slide时有效
     * callBackStartEvent==>回调函数,当tab开始切换之前调用
     * callBackHideEvent==> 回调函数,当处于显示状态的tab完全隐藏时调用
     * callBackShowEvent ==>回调函数,当tab切换完成时调用
     * </pre>
     */
    giant.ui.tab.defaults = {
       tabList:".ui-tab-container .ui-tab-list li",
       contentList:".ui-tab-container .ui-tab-content",
       tabActiveClass:"ui-tab-active",
       tabDisableClass:"ui-tab-disable",
       eventType:"click",                                   //触发事件，有click和mouseover两种类型
       showType:"show",                                     //显示方式，show 直接显示，fade渐变，slide滑动
       showSpeed:200,                                       //显示速度，单位为毫秒
       callBackStartEvent:null,
       callBackHideEvent:null,
       callBackShowEvent:null
    };
})(jQuery);